home *** CD-ROM | disk | FTP | other *** search
- /* $Filename: WormWars/Source/same.h
- * $VER: WormWars 6.9
- * $Description: Header file for Worm Wars
- *
- * © Copyright 2002 James R. Jacobs.
-
- SAME ON EACH PLATFORM -------------------------------------------------- */
-
- #define elif else if
- #define AGLOBAL ; /* global (project-scope) */
- #define MODULE static /* external static (file-scope) */
- #define PERSIST static /* internal static (function-scope) */
- #define AUTO auto /* automatic (function-scope) */
-
- /* miscellaneous */
-
- #define CAUSEWAIT 100
- #define DATELENGTH 8 /* DD/MM/YY */
- #define TIMELENGTH 5 /* HH:MM */
- #define DEFAULTLEVELS 5
- #define ENDXPIXEL ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
- #define ENDYPIXEL ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
- #define FIELDX 52 /* in squares */
- #define FIELDY 38 /* in squares */
- #define HISCORES 4
- #define LIFEMODULO 1000
- #define MAXLEVELS 50 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
- #define NAMELENGTH 21 /* 0..20 are TEXT, 21 is NULL */
- #define NOMODE 0
- #define NUMKEYS 28
- #define PATIENCE 100
- #define SAYLIMIT ((ENDXPIXEL - STARTXPIXEL) / FONTX)
- #define VERSION "$VER: Worm Wars 6.9 (8.2.2002)" // always d.m.y format
- #define ARROWX (FIELDX + 1)
- #define LEVELSIZE ((FIELDX + 1) * (FIELDY + 1))
- #define HISCORESIZE (6 + NAMELENGTH + 1 + DATELENGTH + 1 + TIMELENGTH + 1)
-
- #define BONUS_TAIL 1
- #define BONUS_TIME 10
- #define BONUS_LEVEL 100
-
- /* samples */
-
- #define FXBORN_DOG 0
- #define FXBORN_DRIP 1
- #define FXBORN_GOAT 2
- #define FXBORN_MISSILE 3
- #define FXBORN_ORB 4
- #define FXBORN_PENGUIN 5
- #define FXBORN_PROTECTOR 6
- #define FXDEATH_FRAGMENT 7 // thud
- #define FXDEATH_GOAT 8
- #define FXDEATH_ORB 9
- #define FXDEATH_PENGUIN 10
- #define FXDEATH_WORM 11
- #define FXDO_BOMB 12 // tick
- #define FXDO_ENCLOSE 13
- #define FXDO_GOAT 14 // fire
- #define FXDO_JUMP 15
- #define FXDO_ORB 16 // split
- #define FXGET_AMMO 17
- #define FXGET_CYCLONE 18
- #define FXGET_DRIP 19
- #define FXGET_GROWER 20
- #define FXGET_OBJECT 21
- #define FXGET_NITRO 22
- #define FXGET_POWERUP 23
- #define FXGET_PULSE 24 // explode
- #define FXGET_SKULL 25
- #define FXFILENEW 26
- #define FXFILEOPEN 27
- #define FXFILESAVE 28
- #define FXFILESAVEAS 29
- #define FXEDITCUT 30
- #define FXEDITCOPY 31
- #define FXEDITPASTE 32
- #define FXEDITDELETE 33
- #define FXHELP 34
- #define FXUSE_AMMO 35
- #define FXUSE_ARMOUR 36
- #define FXUSE_BOMB 37
- #define FXUSE_TELEPORT 38
- #define FXBORN_BIRD 39
- #define FX_C 40
- #define FX_O 41
- #define FX_M 42
- #define FX_P 43
- #define FX_L 44
- #define FX_E 45
- #define FX_T 46
- #define FXPAIN 47
- #define FXAPPLAUSE 51 // after each new hiscore
- #define FXGAMEOVER 52 // if all worms are dead
- #define FXCELEBRATE 53 // if game succeeded
- #define FXCLICK 54 // rundown, keypresses
- #define FXLAUNCH 55 // title screen
- #define FXRIFF 56 // after each rundown
- #define FXSIREN 57 // out of time
- #define SAMPLES FXSIREN
- #define FXCENTRE FXDEATH_PENGUIN
- #define FXDO_CLOUD FXDO_GOAT
- #define FXFX FXLAUNCH
- #define FXRUNDOWN FXCLICK
- #define FXUSE_PROTECTOR FXBORN_PROTECTOR
-
- #define PAIN_BIRD 3
- #define PAIN_BOMB 3
- #define PAIN_CLOUD 3
- #define PAIN_DOG 5
- #define PAIN_DRIP 5
- #define PAIN_FISH 2
- #define PAIN_FRAGMENT 3
- #define PAIN_GOAT 2
- #define PAIN_HEAD 5
- #define PAIN_LIGHTNING 3
- #define PAIN_METAL 3
- #define PAIN_MISSILE 5
- #define PAIN_OCTOPUS 5
- #define PAIN_ORB 5
- #define PAIN_OTTER 5
- #define PAIN_PENGUIN 3
- #define PAIN_PROTECTOR 5
- #define PAIN_REMNANT 5
- #define PAIN_SLAYER 2
- #define PAIN_SLIME 2
- #define PAIN_STONE 1
- #define PAIN_TELEPORT 5
- #define PAIN_WHIRLWIND 5
- #define PAIN_WORMFIRE 5
- #define PAIN_WOOD 1
- #define PAIN_ENEMYTAIL 3
- #define PAIN_FRIENDLYTAIL 1
-
- #define SCORE_BIRD 40
- #define SCORE_CLOUD 20
- #define SCORE_FRAGMENT 10
- #define SCORE_DOG 20
- #define SCORE_DRIP 100
- #define SCORE_FISH 20
- #define SCORE_GOAT 50
- #define SCORE_MISSILE 50
- #define SCORE_OCTOPUS 60
- #define SCORE_ORB 40
- #define SCORE_OTTER 150
- #define SCORE_PENGUIN 20
- #define SCORE_TIMEBOMB 100
- #define SCORE_WHIRLWIND 100
-
- /* key types */
-
- #define MOVE 0 /* not AMMO, TRAINER, ONEHUMAN */
- #define TRAINER 2 /* not MOVE, AMMO, ONEHUMAN */
- #define ONEHUMAN 3 /* not MOVE, AMMO, TRAINER */
-
- /* speeds */
-
- #define VERYFAST 1
- #define FAST 2
- #define NORMAL 4
- #define SLOW 8
- #define VERYSLOW 16 /* must be non-0 */
-
- /* The constant NORMAL is used for several purposes:
- a) as a speed (therefore must not be VERYFAST, FAST, SLOW
- or VERYSLOW);
- b) as a blitmode (therefore must not be BLACK or WHITE); and
- c) as a pointer (therefore must not be anything that can be
- a brush).
-
- stats */
-
- #define AMMOLIMIT 100
- #define BIASLIMIT 100
- #define FREEDOMLIMIT 100
- #define STARTLIVES 100
- #define LIVESLIMIT 200
- #define MODELIMIT 100
- #define MULTILIMIT 8 /* don't set >8! */
- #define POWERLIMIT 6
- #define SCORELIMIT 99999999 // 99 million
-
- /* Field values...
- These are objects. */
- #define AFFIXER 0
- #define AMMO 1
- #define ARMOUR 2
- #define BIAS 3
- #define BOMB 4
- #define BONUS 5
- #define CLOCK 6
- #define CONVERTER 7
- #define CUTTER 8
- #define CYCLONE 9
- #define ENCLOSER 10
- #define FREEDOM 11
- #define GROWER 12
- #define HEALER 13
- #define ICE 14
- #define LIFE 15
- #define LIGHTNING 16
- #define MAGNET 17
- #define MISSILE 18
- #define MULTIPLIER 19
- #define NITRO 20
- #define POWER 21
- #define PROTECTOR 22
- #define PULSE 23
- #define PUSHER 24
- #define REMNANTS 25
- #define SIDESHOT 26
- #define SLAYER 27
- #define SLOWER 28
- #define SWITCHER 29
- #define TREASURE 30
- #define UMBRELLA 31
- #define LASTOBJECT UMBRELLA
- /* These are `empty'. */
- #define EMPTY (LASTOBJECT + 1)
- #define SILVER (LASTOBJECT + 2)
- #define GOLD (LASTOBJECT + 3)
- #define FIRSTEMPTY EMPTY
- #define LASTEMPTY GOLD
- #define LASTGOATFIRE LASTEMPTY
- /* Nothing special about the following... */
- #define TELEPORT (GOLD + 1)
- #define FRAGMENT (GOLD + 2)
- #define ORB (GOLD + 3)
- #define FIRSTPROTECTOR (GOLD + 4)
- #define LASTPROTECTOR (GOLD + 7)
- /* Margins indicate `ranges' for:
- n: orb bouncing, normal mode.
- g: goats. */
- #define GREEN_C (GOLD + 8)
- #define RED_O (GOLD + 9)
- #define BLUE_M (GOLD + 10)
- #define YELLOW_P (GOLD + 11)
- #define GREEN_L (GOLD + 12)
- #define RED_E (GOLD + 13)
- #define BLUE_T (GOLD + 14)
- #define YELLOW_E (GOLD + 15)
- #define SKULL (GOLD + 16) /* n g */
- #define SLIME (GOLD + 17) /* [ */
- #define STONE (GOLD + 18) /* [ | */
- #define GOAT (GOLD + 19) /* ] | */
- #define WOOD (GOLD + 20) /* | */
- #define FIRSTTAIL (GOLD + 21) /* | */
- #define LASTTAIL (GOLD + 24) /* ] */
- #define FIRSTLETTER GREEN_C
- #define LASTLETTER YELLOW_E
- #define LASTNONE LASTTAIL
- #define LETTERS (LASTLETTER - FIRSTLETTER)
- #define FISH (LASTTAIL + 1)
- #define OTTER (LASTTAIL + 2)
- #define FIRSTFIRE (LASTTAIL + 3)
- #define LASTFIRE (LASTTAIL + 6)
- #define FIRSTMISSILE (LASTTAIL + 7)
- #define LASTMISSILE (LASTTAIL + 10)
- #define START (LASTTAIL + 11)
- #define MUSIC (LASTTAIL + 12)
- #define FX (LASTTAIL + 13)
- #define ZERO (LASTTAIL + 14)
- #define TIMEBOMB ZERO
- #define HEAD (ZERO + 10)
- #define GREENHEADUP HEAD
- #define REDHEADUP (HEAD + 1)
- #define BLUEHEADUP (HEAD + 2)
- #define YELLOWHEADUP (HEAD + 3)
- #define FIRSTHEAD GREENHEADUP
- #define LASTHEAD YELLOWHEADUP
- #define GREENHEADDOWN (HEAD + 4)
- #define REDHEADDOWN (HEAD + 5)
- #define BLUEHEADDOWN (HEAD + 6)
- #define YELLOWHEADDOWN (HEAD + 7)
- #define GREENHEADLEFT (HEAD + 8)
- #define REDHEADLEFT (HEAD + 9)
- #define BLUEHEADLEFT (HEAD + 10)
- #define YELLOWHEADLEFT (HEAD + 11)
- #define GREENHEADRIGHT (HEAD + 12)
- #define REDHEADRIGHT (HEAD + 13)
- #define BLUEHEADRIGHT (HEAD + 14)
- #define YELLOWHEADRIGHT (HEAD + 15)
- #define GREENMODEUP (HEAD + 16)
- #define REDMODEUP (HEAD + 17)
- #define BLUEMODEUP (HEAD + 18)
- #define YELLOWMODEUP (HEAD + 19)
- #define GREENMODEDOWN (HEAD + 20)
- #define REDMODEDOWN (HEAD + 21)
- #define BLUEMODEDOWN (HEAD + 22)
- #define YELLOWMODEDOWN (HEAD + 23)
- #define GREENMODELEFT (HEAD + 24)
- #define REDMODELEFT (HEAD + 25)
- #define BLUEMODELEFT (HEAD + 26)
- #define YELLOWMODELEFT (HEAD + 27)
- #define GREENMODERIGHT (HEAD + 28)
- #define REDMODERIGHT (HEAD + 29)
- #define BLUEMODERIGHT (HEAD + 30)
- #define YELLOWMODERIGHT (HEAD + 31)
- #define METAL (HEAD + 32)
- #define FIRSTDRIP (HEAD + 33)
- #define DRIP FIRSTDRIP
- #define LASTDRIP (HEAD + 36)
- #define BLACKENED (HEAD + 37)
- #define WHITENED (HEAD + 38)
- #define PENGUIN (HEAD + 39)
- #define WHIRLWIND (HEAD + 40)
- #define DOG (HEAD + 41) /* dog chasing */
- #define DOGAWAKENING (HEAD + 42)
- #define DOGDORMANT (HEAD + 43)
- #define CLOUD (HEAD + 44)
- #define ALL (HEAD + 45)
- #define FIRSTARROW (HEAD + 46)
- #define LASTARROW (HEAD + 49)
- #define DYNAMITE (HEAD + 50)
- #define OCTOPUS (HEAD + 51)
- #define FIRSTMISSILEFRAME (HEAD + 52)
- #define BIRD (FIRSTMISSILEFRAME + 20)
- #define ARRAYSIZE (BIRD + 2)
-
- #define ANYTHING STONE // should be something that is valid field contents
-
- /* These have no imagery. */
- #define TEMPTAIL (ARRAYSIZE + 1)
- #define TEMPWOOD TEMPTAIL
- #define TEMPSLIME TEMPTAIL
- #define TEMPLIGHTNING TEMPTAIL
- #define TEMPSILVER (ARRAYSIZE + 2)
- #define TEMPGOLD (ARRAYSIZE + 3)
- #define NOSQUARE (ARRAYSIZE + 4)
- #define BANGDYNAMITE (ARRAYSIZE + 5)
- #define TEMPBANGDYNAMITE (ARRAYSIZE + 6)
- #define TEMPDYNAMITE (ARRAYSIZE + 7)
-
- /* game status */
-
- #define GAMEOVER 0
- #define PLAYGAME 1
- #define FIELDEDIT 2
- #define TITLESCREEN 3
-
- /* indicator locations */
-
- #define CAUSEYDISTANCE 2 /* distance from centre for cause */
- #define LETTERYDISTANCE 3 /* distance from centre for letters */
- #define ICONY (FIELDY / 2)
- #define MUSICICON (FIELDX + 3)
- #define CLOCKICON (FIELDX + 4)
-
- /* control values */
-
- #define NONE 0 /* must be 0 */
- #define AMIGA 1
- #define JOYSTICK 2
- #define GAMEPAD 3
- #define KEYBOARD 4
- #define IBMPC AMIGA
-
- #define MISSILEFRAMES 5
-
- /* PROTOTYPES -------------------------------------------------------------
-
- engine.c */
-
- AGLOBAL void clearhiscores(void);
- AGLOBAL void enginesetup(void);
- AGLOBAL void gameloop(void);
- AGLOBAL void matchteleports(void);
- AGLOBAL void newfields(void);
- AGLOBAL void newgame(void);
- AGLOBAL void timeloop(void);
- AGLOBAL void newfield(void);
-
- AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
- AGLOBAL void drawsquare(SBYTE x, SBYTE y);
- AGLOBAL void icon(SBYTE player, UBYTE image);
- AGLOBAL void saylevel(COLOUR colour);
- AGLOBAL void train(SCANCODE scancode);
- AGLOBAL void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
- AGLOBAL void wormscore(SBYTE player, ULONG score);
-
- AGLOBAL SBYTE loadfields(STRPTR pathname);
- AGLOBAL SBYTE partner(SBYTE which);
- AGLOBAL ABOOL savefields(STRPTR pathname);
- AGLOBAL SBYTE valid(SBYTE x, SBYTE y);
- AGLOBAL SBYTE xwrap(SBYTE x);
- AGLOBAL SBYTE ywrap(SBYTE y);
- AGLOBAL void align(STRPTR string, SBYTE size, TEXT filler)
-
- /* system.c */
-
- AGLOBAL void celebrate(void);
- AGLOBAL void clearkybd(void);
- AGLOBAL void clearscreen(void);
- AGLOBAL void datestamp(void);
- AGLOBAL void gameinput(void);
- AGLOBAL void hiscores(void);
- AGLOBAL void resettime(void);
- AGLOBAL void systemsetup(void);
- AGLOBAL void timing(void);
- AGLOBAL void titlescreen(void);
- AGLOBAL void turborender(void);
- AGLOBAL void waitasec(void);
-
- AGLOBAL void cleanexit(SLONG rc);
- AGLOBAL void draw(SBYTE x, SBYTE y, UBYTE image);
- AGLOBAL void effect(SBYTE index);
- AGLOBAL void fileopen(ABOOL revert);
- AGLOBAL void filesaveas(ABOOL flag);
- AGLOBAL void flash(ULONG where);
- AGLOBAL void rundown(SBYTE player);
- AGLOBAL void say(STRPTR sentence, COLOUR colour);
- AGLOBAL void stat(SBYTE player, SBYTE line);
- AGLOBAL void stopfx(void);
- AGLOBAL void ReadAdapterJoystick(UBYTE unit);
- AGLOBAL void ReadStandardJoystick(ULONG port);
- AGLOBAL void ReadGamepads(void);
-
- AGLOBAL ABOOL anykey(ABOOL timeout);
- AGLOBAL ABOOL verify(void);
- AGLOBAL ABOOL ZOpen(STRPTR fieldname, ABOOL write);
- AGLOBAL ABOOL ZRead(STRPTR IOBuffer, ULONG length);
- AGLOBAL ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
- AGLOBAL ABOOL ZClose(void);
-
- AGLOBAL void help(UBYTE type);
- AGLOBAL void helpabout(void);
- AGLOBAL void helploop(UBYTE type);
- AGLOBAL void toggle(SBYTE key);
- AGLOBAL void filedelete(void);
-
- // fe.c
- AGLOBAL void fieldedit(void);
- AGLOBAL void setbrush(UBYTE newbrush);
-
- /* PUBLIC STRUCTURES ------------------------------------------------------ */
-
- AGLOBAL struct HiScoreStruct
- { SBYTE player, level;
- ULONG score; /* the score itself */
- TEXT name[NAMELENGTH + 2]; /* name of the player */
- ABOOL fresh; /* is the entry new? */
- TEXT date[DATELENGTH + 1], /* date of achievement */
- time[TIMELENGTH + 1]; /* time of achievement */
- };
- AGLOBAL struct WormStruct
- { SBYTE x, y, deltax, deltay, position, posidir, victor,
- statx, staty, pos, levelreached, arrowy;
- ABOOL affixer, encloser, remnants, alive, moved, nitro, pusher,
- sideshot, flashed, rammed;
- UBYTE speed, control, cause, last, multi, power;
- SWORD armour, ammo, bias, cutter, lives, freedom;
- ULONG score, oldscore, hiscore, dynamitescore, causewait, port;
- TEXT name[NAMELENGTH + 1];
- COLOUR colour;
- };
- AGLOBAL struct TeleportStruct
- { SBYTE x, y;
- ABOOL alive;
- };
-
- /* Must have blank line at EOF. */
-